home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / prolog.arc / ATOM.FIL < prev    next >
Encoding:
Text File  |  1985-07-11  |  1.3 KB  |  43 lines

  1. /*=============================================================================*/
  2. /* Makes new atoms, one at a time. Do not expect a repeat solution.
  3. You must ask each time you want an atom. It starts with some root,
  4. and appends an incrementing number onto it.
  5.  
  6. Ask: ?-gensym( student, X ).      get: X = student1.
  7.      ?-gensym( student, X ).      get: X = student2.
  8.      ?-gensym( student, X ).      get: X = student3.
  9.  
  10.     and ad infinitum. */
  11.  
  12. gensym( Root, Atom ) :-
  13.     get_num( Root, Num ),
  14.     name( Root, Name1 ),
  15.     integer_name( Num, Name2 ),
  16.     append( Name1, Name2, Name ),
  17.     name( Atom, Name ).
  18.  
  19. get_num( Root, Num ) :-
  20.     retract( current_num( Root, Num1 )), !,
  21.     Num is Num1 + 1,
  22.     asserta( current_num( Root, Num)).
  23.  
  24. get_num( Root, 1 ) :- asserta( current_num( Root, 1 )).
  25.  
  26. integer_name( Int, List ) :- integer_name( Int, [], List ).
  27. integer_name( I, Sofar, [C|Sofar] ) :-
  28.     I < 10, !, C is I + 48.
  29. integer_name( I, Sofar, List ) :-
  30.     Tophalf is I/10,
  31.     Bothalf is I mod 10,
  32.     C is Bothalf + 48,
  33.     integer_name( Tophalf, [C|Sofar], List ).
  34.  
  35.  
  36. append( [], L, L ).
  37. append( [Z|L1], L2, [Z|L3] ) :- append( L1, L2, L3 ).
  38.  
  39. printstring( [] ).
  40. printstring( [] ).
  41. printstring( [H|T] ) :- put( H ), printstring( T ).
  42. /*=============================================================================*/
  43.